package com.yaoge.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
//@RequestMapping("/test")  //代表这个类的所有方法都要加上一个这样的前缀
public class HelloController {

    /**
     * value 的参数是一个String 数组 意味着可以接受多个请求映射地址
     * @return
     */
    @RequestMapping(value={"/","/index"})
    public String index(){
        return "index";
    }
    @RequestMapping(value={"/put"})
    public String put(){
        return "putdata";
    }
     @RequestMapping("/hello")
    public String hello(){
        int i=10/0;
        return "target";
    }

    /**
     * 测试 requestMapping 中的method 参数  可以设置多个值，也是个数组  代表匹配的侵犯求方法
     */
    @RequestMapping(value = "/test",method = RequestMethod.GET)
    public String testRquestMappingMethod(){
        return "success";
    }

    /**
     * 测试  RequestMapping  的param 参数  代表请求时的参数匹配 只有对应的参数对应上  才能映射上
     * 下面的要求就是  参数必须要携带 username ，password参数  并且 password参数的值不能是123456
     * @return
     */
    @RequestMapping(value = "/testParam",params = {"username","password!=123456"})
    public String testRquestMappingParams(){
        return "success";
    }

    /**
     * 映射地址 支持 通配符  下面的意思就是
     * ？：表示任意的单个字符
     * *：表示任意的0个或多个字符
     * **：表示任意的一层或多层目录
     * 注意：在使用**时，只能使用 下面的方式
     * @return
     */
    @RequestMapping(value = "/**/success")
    public String testRquestMappingAnt(){
        return "success";
    }

    /**
     * 测试路径中的占位符 就是为了 后面的RESTful 风格编程做基础
     * 其实就是 把请求的参数和要完成的动作都体现在请求中
     * 而不是每一个操作都要去重新创建一个方法 也可以通过路径知道操作的目的  更加直观
     */
    @RequestMapping("/testRest/{id}/{username}")
    public  String testRest(@PathVariable("id") String id,@PathVariable("username") String username){

        System.out.println("id:"+id+"username:"+username);
        return "success";
    }
}
